/*
    工具函数包
*/

// 引入xml2js,将XML转换为js对象
const {parseString} = require('xml2js')
// 引入fs模块
const { writeFile,readFile} = require('fs')
// 引入path模块
const {resolve} = require('path')
module.exports = {

    /*获取用户发送的信息*/
    getUserDataAsync(req){
        return new Promise((resolve,reject)=>{
            let xmlData = ''
            req
            .on('data', data =>{
                // 接受流式数据，传递过来时触发当前事件，会将数据注入到回调函数中
                // console.log(data)
                // data数据是buffer,需要转化成字符串
                xmlData += data.toString()
            })
            .on('end',()=>{
                // 当数据接收完毕时，会触发当前事件
                resolve(xmlData)
            })
        }) 
    },
    /*处理xml数据为js对象*/
    parseXMLAsync(xmlData){
        return new Promise((resolve,reject)=>{
            parseString(xmlData,{trim:true},(err,data)=>{
                // {trim:true}去除首尾空格
                if(!err){
                    resolve(data)
                }else{
                    reject('parseXMLAsync方法出错了'+err)
                }
            })
        })
    },
    /*格式化js数据*/
    formatMessage(jsData){
        let messsage = {}
        // 获取xml对象
        jsData = jsData.xml
        if (typeof jsData == 'object') { 
            // 遍历对象
            for (let key in jsData) {
				// console.log(jsData[key])
            let value = jsData[key];
            // 过滤空的属性值
                if(Array.isArray(value) && value.length > 0){
                    messsage[key] = value[0]
					// console.log(value[0])
                }
            }
        }
		return messsage
    },
    /*缓存access_token,ticket的方法*/
    writeFileAsync(data,fileName){
        //fileName 保存路径文件
        data = JSON.stringify(data)
        const filePath = resolve(__dirname,fileName)
        return new Promise((resolve, reject) => {
        
            writeFile(filePath, data, err => {
                if (!err) {
                    console.log('文件保存ok')
                    resolve()
                } else {
                    reject('writeFileAsync方法出错了' + err)
                }
            })
        })
    },
    /*读取access_token,ticket的方法*/
    readFileAsync(fileName){
        const filePath = resolve(__dirname,fileName)
        return new Promise((resolve, reject) => {
            // 读取本地文件的ticket
            readFile(filePath,(err, data) => {
                if (!err) {                    
                    // console.log('文件读取成功')
                    // 将json字符串转化为js对象
                    data = JSON.parse(data)
                    // console.log(data)
                    resolve(data)  
                } else {
                    reject('readTicket方法出错了' + err)
                }
            })
        })
    }
    
}